﻿using LSFTP.model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LSFTP
{
    public interface IFTP
    {
        /// <summary>
        /// 连接FTP
        /// </summary>
        /// <returns>true成功</returns>
        bool Connect();

        /// <summary>
        /// 断开FTP
        /// </summary> 
        void Disconnect();

        /// <summary>
        /// 获取连接状态
        /// </summary>
        /// <returns></returns>
        bool GetConnectStatus();

        /// <summary>
        /// FTP上传文件
        /// </summary>
        /// <param name="localPath">本地路径</param>
        /// <param name="remotePath">远程路径</param>
        /// <returns>返回一个值，指示是否上传成功</returns>
        bool Upload(string localPath, string remotePath);

        /// <summary>
        /// 下载FTP文件
        /// </summary>
        /// <param name="remoteFile">远程路径</param>
        /// <param name="localPath">本地路径</param>
        /// <returns>返回一个值，指示是否下载成功</returns>
        bool Download(string remoteFile, string localPath);

        /// <summary>
        /// 下载FTP文件
        /// </summary>
        /// <param name="remoteFile">远程路径</param>
        /// <param name="localPath">本地路径</param>
        /// <returns>返回一个值，指示是否下载成功</returns>
        bool Download(List<FTPFileInfo> remoteFile, string localPath);

        /// <summary>
        /// 重命名FTP文件
        /// </summary>
        /// <param name="oldFilePath">旧远程路径</param>
        /// <param name="newFilePath">新远程路径</param>
        /// <returns>返回一个值，指示是否重命名成功</returns>
        bool Rename(string oldFilePath,string newFilePath);

        /// <summary>
        /// 删除FTP文件
        /// </summary>
        /// <param name="remoteFile">远程文件路径</param>
        /// <returns>返回一个值，指示是否删除成功</returns>
        bool DeleteFile(string remoteFile);

        /// <summary>
        /// 删除文件夹
        /// </summary>
        /// <param name="dirName">远程文件夹路径</param>
        /// <returns>返回一个值，指示是否删除成功</returns>
        bool DeleteDirectory(string dirName);

        /// <summary>
        /// 获取FTP服务根目录文件列表
        /// </summary>
        /// <returns>返回文件名列表</returns>
        List<string> GetFileList();

        /// <summary>
        /// 获取FTP文件列表
        /// </summary>
        /// <param name="remotePath"></param>
        /// <returns>返回文件名列表</returns>
        List<string> GetFileList(string remotePath);

        /// <summary>
        /// 获取固定后缀的FTP文件列表
        /// </summary>
        /// <param name="remotePath">远程文件夹路径</param>
        /// <param name="fileSuffix">文件后缀</param>
        /// <returns>返回文件名列表</returns>
        List<string> GetFileList(string remotePath, string fileSuffix);

        /// <summary>
        /// 深层遍历文件夹，获取FTP文件列表
        /// </summary>
        /// <param name="remotePath">远程文件夹路径</param>
        /// <param name="fileSuffix">文件后缀</param>
        /// <param name="deep">遍历获取</param>
        /// <returns>返回文件名列表</returns>
        List<string> GetFileList(string remotePath, string fileSuffix, bool deep);

        /// <summary>
        /// 获取服务目录列表
        /// </summary>
        /// <param name="remoteFolder"></param>
        /// <returns>返回目录名列表</returns>
        List<string> GetDirectoryList(string remoteFolder);

        /// <summary>
        /// 移动FTP文件
        /// </summary>
        /// <param name="oldRemotePath">旧远程文件路径</param>
        /// <param name="newRemotePath">新远程文件路径</param>
        /// <returns>返回一个值，指示是否移动成功</returns>
        bool Move(string oldRemotePath, string newRemotePath);

        /// <summary>
        /// 检查当前路径上是否存在某个文件
        /// </summary>
        /// <param name="remoteFile">要检查的文件名</param>
        /// <returns>返回一个值,指示要检查的文件是否存在</returns>
        bool CheckFileExist(string remoteFile);

        /// <summary>
        /// 在当前目录下创建文件夹
        /// </summary>
        /// <param name="dirName">文件夹名称</param>
        /// <returns>返回一个值,指示是否创建成功</returns>
        bool MakeDirectory(string dirName);

        /// <summary>
        /// 在当前目录下创建文件夹
        /// </summary>
        /// <param name="path">远程路径</param>
        /// <param name="name">文件名</param>
        /// <returns>返回一个值,指示是否创建成功</returns>
        bool MakeDirectory(string path, string name);

        /// <summary>
        /// 获取最后修改时间
        /// </summary>
        /// <param name="remoteFile">远程文件名</param>
        /// <returns>返回最后修改时间</returns>
        DateTime GetLastWriteTime(string remoteFile);


        /// <summary>
        /// 获取FTP服务根目录文件列表
        /// </summary>
        /// <returns>返回文件详细信息列表</returns>
        List<FTPFileInfo> GetFileInfoList();

        /// <summary>
        /// 获取FTP文件列表
        /// </summary>
        /// <param name="remotePath"></param>
        /// <returns>返回文件详细信息列表</returns>
        List<FTPFileInfo> GetFileInfoList(string remotePath);

        /// <summary>
        /// 获取固定后缀的FTP文件列表
        /// </summary>
        /// <param name="remotePath">远程文件夹路径</param>
        /// <param name="fileSuffix">文件后缀</param>
        /// <returns>返回文件详细信息列表</returns>
        List<FTPFileInfo> GetFileInfoList(string remotePath, string fileSuffix);

        /// <summary>
        /// 深层遍历文件夹，获取FTP文件列表
        /// </summary>
        /// <param name="remotePath">远程文件夹路径</param>
        /// <param name="fileSuffix">文件后缀</param>
        /// <param name="deep">遍历获取</param>
        /// /// <param name="isDisConnect">是否关闭连接</param>
        /// <returns>返回文件详细信息列表</returns>
        List<FTPFileInfo> GetFileInfoList(string remotePath, string fileSuffix, bool deep, bool isDisConnect);
    }
}
